package com.aasa.siccosap.action;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.tools.ant.util.DateUtils;

import com.aasa.siccosap.bean.CertificadoBean;
import com.aasa.siccosap.bean.ClienteBean;
import com.aasa.siccosap.bean.ColadaBean;
import com.aasa.siccosap.bean.ConsultaWS;
import com.aasa.siccosap.bean.DespachoBean;
import com.aasa.siccosap.bean.EmpresaBean;
import com.aasa.siccosap.bean.ObraBean;
import com.aasa.siccosap.bean.ParametrosWS;
import com.aasa.siccosap.bean.ProductoBean;
import com.aasa.siccosap.bean.RegionBean;
import com.aasa.siccosap.bean.TipoDocumentoBean;
import com.aasa.siccosap.form.BloqueoObraForm;
import com.aasa.siccosap.form.ConsultaForm;
import com.aasa.siccosap.form.ReimpresionForm;
import com.aasa.siccosap.service.ClienteService;
import com.aasa.siccosap.service.ColadaService;
import com.aasa.siccosap.service.DespachoService;
import com.aasa.siccosap.service.ObraService;
import com.aasa.siccosap.service.ProductoService;
import com.aasa.siccosap.service.ReimpresionService;
import com.aasa.siccosap.util.FTPUtils;
import com.aasa.siccosap.util.UtilPersistencia;
import com.caasa.docus.to.xsd.ReimpresionDocBean;
import com.caasa.docus.ws.DocumentosLocator;
import com.caasa.docus.ws.DocumentosPortType;

public class ReimpresionAction extends GenericaAction {

	public ActionForward reimpresionHome(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ReimpresionForm objL_reimpresionForm = (ReimpresionForm)form;

			ReimpresionService objL_reimpresionService = new ReimpresionService();

			List<EmpresaBean> aobjL_listaEmpresas = objL_reimpresionService.consultarEmpresas();
			
			List<TipoDocumentoBean> aobjL_listaTipoDocumento = objL_reimpresionService.consultarTipoDocumento();

			if (request.isUserInRole("METALURGIA")) {
				System.out.println("USUARIO ES METALURGIA");
				aobjL_listaTipoDocumento = objL_reimpresionService.consultarTipoDocumentoMetalurgia();
			} else {
				System.out.println("USUARIO NO ES METALURGIA");
			}
			
			//Fomulario Factura, Guia			
			objL_reimpresionForm.setStrPv_codigoCliente("");
			objL_reimpresionForm.setStrPv_nombreCliente("");
			cargaCodigoClienteEnFormulario(request, objL_reimpresionForm);
			objL_reimpresionForm.setListaEmpresas(aobjL_listaEmpresas);
			objL_reimpresionForm.setListaTipoDocumentos(aobjL_listaTipoDocumento);
			objL_reimpresionForm.setStrPv_empresa("");
			objL_reimpresionForm.setStrPv_nroSerie("");
			objL_reimpresionForm.setStrPv_formato("SI");
			objL_reimpresionForm.setStrPv_nroInicial("");
			objL_reimpresionForm.setStrPv_nroFinal("");
			//fin
			
			//Por Factura
			objL_reimpresionForm.setStrPv_serie("");
			objL_reimpresionForm.setStrPv_numero(""); 

			//Por fecha de factura
			int intL_dias = 0;
			int intL_mes = -6;
			int intL_anio = -1;
			Calendar objL_calendar = Calendar.getInstance();
			// System.out.println(new Date(c1.getTimeInMillis()));
			if (Calendar.MONTH <= 12) {
				intL_mes = -6;
				intL_anio = 0;
				if (Calendar.MONTH <= 6) {
					intL_mes = 6;
					intL_anio = -1;
				}
			}
			
			objL_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
			objL_calendar.add(Calendar.MONTH, intL_mes);
			objL_calendar.add(Calendar.YEAR, intL_anio);
			String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()), "dd/MM/yyyy");
			
			objL_reimpresionForm.setStrPv_fechaInicioF(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinF("");
			
			//Por Numero de obra y/o despacho
			objL_reimpresionForm.setStrPv_codigoObra("");
			objL_reimpresionForm.setStrPv_nombreObra("");
			List<DespachoBean> aDesL_listaDespachos = null;
			objL_reimpresionForm.setListaDespacho(aDesL_listaDespachos);
			
			//Por Numero de producto Y/O colada 
			objL_reimpresionForm.setStrPv_fechaInicioPr(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinPr("");
			
			objL_reimpresionForm.setStrPv_nombreProducto("");
			objL_reimpresionForm.setStrPv_codigoProducto("");
			
			objL_reimpresionForm.setStrPv_codigoColada("");
			objL_reimpresionForm.setStrPv_nombreColada("");

			objL_reimpresionForm.setStrPv_filtroBusqueda("PF");

			objL_reimpresionForm.setStrPv_flagTipoDocumento("0");
			if (request.isUserInRole("METALURGIA")) {
				objL_reimpresionForm.setStrPv_flagTipoDocumento("1");
			}

			//seteamos el codigo del cliente en caso sea CLIENTE
						
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");

			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigoUsuario);
				String strL_nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_reimpresionForm.setStrPv_codigoCliente(strL_codigoUsuario);
				objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("Reimpresion");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ReimpresionAction-reimpresionHome: " + e.getMessage());
			return mapping.findForward("error");
		}
	}
	

	public ActionForward reimpresionHomeCertificado(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {

			ReimpresionForm objL_reimpresionForm = (ReimpresionForm) form;

			ReimpresionService objL_reimpresionService = new ReimpresionService();

			// cargamos las listas por defecto del formulario
	        List<EmpresaBean> aobjL_listaEmpresas = objL_reimpresionService.consultarEmpresas();
			
			List<TipoDocumentoBean> aobjL_listaTipoDocumento = objL_reimpresionService.consultarTipoDocumento();
			
			if (request.isUserInRole("METALURGIA")) {
				System.out.println("USUARIO ES METALURGIA");
				aobjL_listaTipoDocumento = objL_reimpresionService.consultarTipoDocumentoMetalurgia();
			} else {
				System.out.println("USUARIO NO ES METALURGIA");
			}

			objL_reimpresionForm.setStrPv_codigoCliente("");
			objL_reimpresionForm.setStrPv_nombreCliente("");
			cargaCodigoClienteEnFormulario(request, objL_reimpresionForm);
			objL_reimpresionForm.setListaEmpresas(aobjL_listaEmpresas);
			objL_reimpresionForm.setListaTipoDocumentos(aobjL_listaTipoDocumento);
			objL_reimpresionForm.setStrPv_empresa("");
			objL_reimpresionForm.setStrPv_nroSerie("");
			objL_reimpresionForm.setStrPv_formato("SI");
			objL_reimpresionForm.setStrPv_nroInicial("");
			objL_reimpresionForm.setStrPv_nroFinal("");

			objL_reimpresionForm.setStrPv_serie("");
			objL_reimpresionForm.setStrPv_numero(""); 
			int intL_dias = 0;
			int intL_mes = -6;
			int intL_anio = -1;
			Calendar objL_calendar = Calendar.getInstance();
			// System.out.println(new Date(c1.getTimeInMillis()));
			if (Calendar.MONTH <= 12) {
				intL_mes = -6;
				intL_anio = 0;
				if (Calendar.MONTH <= 6) {
					intL_mes = 6;
					intL_anio = -1;
				}
			}
			// System.out.println("mes y anho: " + mes + " " + anho);
			objL_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
			objL_calendar.add(Calendar.MONTH, intL_mes);
			objL_calendar.add(Calendar.YEAR, intL_anio);
			// String strL_fechaFin =
			// DateUtils.format(Calendar.getInstance().getTime(),"dd/MM/yyyy");
			String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()), "dd/MM/yyyy");
			
			objL_reimpresionForm.setStrPv_fechaInicioF(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinF("");
			
			objL_reimpresionForm.setStrPv_codigoObra("");
			objL_reimpresionForm.setStrPv_nombreObra("");
		
			
			List<DespachoBean> aDesL_listaDespachos = null;
			objL_reimpresionForm.setListaDespacho(aDesL_listaDespachos);
			
			objL_reimpresionForm.setStrPv_fechaInicioPr(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinPr("");
			
			objL_reimpresionForm.setStrPv_nombreProducto("");
			objL_reimpresionForm.setStrPv_codigoProducto("");
			
			objL_reimpresionForm.setStrPv_codigoColada("");
			objL_reimpresionForm.setStrPv_nombreColada("");

			objL_reimpresionForm.setStrPv_filtroBusqueda("PF");
			objL_reimpresionForm.setStrPv_flagTipoDocumento("1");
			
			/*
			 * if (request.isUserInRole("METALURGIA")) {
			 * reimpresionForm.setFlagTipoDocumento("1"); }else{
			 * reimpresionForm.setFlagTipoDocumento("0"); }
			 */

			// seteamos el codigo del cliente en caso sea CLIENTE
			
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigoUsuario);
				String strL_nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_reimpresionForm.setStrPv_codigoCliente(strL_codigoUsuario);
				objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("Reimpresion");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ReimpresionAction-reimpresionHome: " + e.getMessage());
			// System.out.println("ReimpresionAction-reimpresionHome:
			// "+e.getMessage());
			return mapping.findForward("error");
		}
	}

	public ActionForward refrescar(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		try {
			ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

			// seteamos el codigo del cliente en caso sea CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigoUsuario);
				String strL_nombreCliente = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_reimpresionForm.setStrPv_codigoCliente(strL_codigoUsuario);
				objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
			} else {
				objL_reimpresionForm.setStrPv_codigoCliente(request.getParameter("codigoCliente"));
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(objL_reimpresionForm.getStrPv_codigoCliente());
				String strL_nombreCliente = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
			}

			objL_reimpresionForm.setStrPv_filtroBusqueda(request.getParameter("opcion"));

			objL_reimpresionForm.setStrPv_serie("");
			objL_reimpresionForm.setStrPv_numero(""); 

			int intL_dias = 0;
			int intL_mes = -6;
			int intL_anio = -1;
			Calendar objL_calendar = Calendar.getInstance();
			// System.out.println(new Date(c1.getTimeInMillis()));
			if (Calendar.MONTH <= 12) {
				intL_mes = -6;
				intL_anio = 0;
				if (Calendar.MONTH <= 6) {
					intL_mes = 6;
					intL_anio = -1;
				}
			}
			// System.out.println("mes y anho: " + mes + " " + anho);
			objL_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
			objL_calendar.add(Calendar.MONTH, intL_mes);
			objL_calendar.add(Calendar.YEAR, intL_anio);
			// String strL_fechaFin =
			// DateUtils.format(Calendar.getInstance().getTime(),"dd/MM/yyyy");
			String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()), "dd/MM/yyyy");

			objL_reimpresionForm.setStrPv_fechaInicioF(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinF("");
			
			objL_reimpresionForm.setStrPv_codigoObra("");
			objL_reimpresionForm.setStrPv_nombreObra("");
			
							
			objL_reimpresionForm.setStrPv_fechaInicioPr(strL_fechaInicio);
			objL_reimpresionForm.setStrPv_fechaFinPr("");
			
			objL_reimpresionForm.setStrPv_nombreProducto("");
			objL_reimpresionForm.setStrPv_codigoProducto("");
			
			objL_reimpresionForm.setStrPv_codigoColada("");
			objL_reimpresionForm.setStrPv_nombreColada("");
			
		
			// System.out.println("opcion " + request.getParameter("opcion"));

			// System.out.println("serie " + reimpresionForm.getSerie());
			// System.out.println("serie " + request.getAttribute("serie"));
			// System.out.println("numero " +
			// request.getSession(false).getAttribute("numero"));

			return mapping.findForward("Reimpresion");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ReimpresionAction-reimpresionHome: " + e.getMessage());
			
			return mapping.findForward("error");
		}
	}

	public ActionForward mostrarSegunTipoDoc(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		/*
		 * if(reclamoRegistrarForm.getTipoRegReclamo().equalsIgnoreCase(String.valueOf(CCommon.LONG_EN_CERO))){
		 * reclamoRegistrarForm.setFlagTipoRegReclamo(null); }else{
		 */
		if (objL_reimpresionForm.getStrPv_tipoDocumento().equalsIgnoreCase("033")) {
			objL_reimpresionForm.setStrPv_flagTipoDocumento("1");
		} else {
			objL_reimpresionForm.setStrPv_flagTipoDocumento("0");
		}
		/* } */

		//SETEA EL CLIENTE
		String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
		String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");
		
		if (strL_tipoUsuario.equals("CLIENTE")) {
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(strL_codigoUsuario);
			String strL_nombreCliente = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codigoUsuario);
			objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
		} else {
			objL_reimpresionForm.setStrPv_codigoCliente(request.getParameter("codigoCliente"));
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(objL_reimpresionForm.getStrPv_codigoCliente());
			String strL_nombreCliente = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			objL_reimpresionForm.setStrPv_nombreCliente(strL_nombreCliente);
		}

		// System.out.println("Tipo Documento: " +
		// reimpresionForm.getTipoDocumento());
		return mapping.findForward("Reimpresion");
	}

	public ActionForward IniciarBuscarObra(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) form;

		String strL_codcli = "";

		strL_codcli = request.getParameter("codCli");

		objL_reimpresionForm.setStrPv_codigoObra("");
		objL_reimpresionForm.setStrPv_nombreObra("");
		objL_reimpresionForm.setStrPv_codigoCliente("");

		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
		}
		
		return mapping.findForward("ConsultaObraReimpresion");

	}

	public ActionForward BuscarObra(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;
		ObraService objL_obraService = new ObraService();
		ArrayList<ObraBean> aobjL_listaObras = null;

		try {

			aobjL_listaObras = objL_obraService.consultarObras(objL_reimpresionForm.getStrPv_codigoCliente(), objL_reimpresionForm.getStrPv_codigoObra(),objL_reimpresionForm.getStrPv_nombreObra());

			request.setAttribute("listaObras", aobjL_listaObras);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return mapping.findForward("ConsultaObraReimpresion");

	}

	public ActionForward IniciarBuscarProducto(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		String strL_codcli = "";
		strL_codcli = request.getParameter("codCli");

		objL_reimpresionForm.setStrPv_codigoCliente("");
		
		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
		}
	
		return mapping.findForward("ConsultaProductoReimpresion");

	}

	public ActionForward IniciarBuscarColada(ActionMapping mapping,
			ActionForm objA_actionform, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionform;

		String strL_codcli = "";
		strL_codcli = request.getParameter("codCli");

		String strL_codpro = "";
		strL_codpro = request.getParameter("codPro");

		objL_reimpresionForm.setStrPv_codigoCliente("");
		objL_reimpresionForm.setStrPv_codigoProducto("");

		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
		}

		if (strL_codpro != "") {
			objL_reimpresionForm.setStrPv_codigoProducto(strL_codpro);
		}
		
		return mapping.findForward("ConsultaColadaReimpresion");

	}

	public ActionForward BuscarProducto(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;
		ProductoService objL_productoService = new ProductoService();
		ArrayList<ProductoBean> aobjL_listaProductos = null;

		try {
			aobjL_listaProductos = objL_productoService.consultarProducto(objL_reimpresionForm.getStrPv_codigoCliente(), objL_reimpresionForm.getStrPv_codigoProducto(),objL_reimpresionForm.getStrPv_nombreProducto());

			request.setAttribute("listaProductos", aobjL_listaProductos);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println("Busco y Llamo a BuscarProducto
		// ConsultaProductoReimpresion OK. Cliente: " +
		// reimpresionForm.getCodigoCliente());
		return mapping.findForward("ConsultaProductoReimpresion");

	}

	public ActionForward BuscarColada(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;
		ColadaService objL_coladaService = new ColadaService();
		ArrayList<ColadaBean> aobjL_listaColadas = null;

		int intL_dias = 0;
		int intL_anio = -1;
		Calendar objL_calendar = Calendar.getInstance();
		// System.out.println(new Date(c1.getTimeInMillis()));
		objL_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
		objL_calendar.add(Calendar.YEAR, intL_anio);
		String strL_fechaFin = DateUtils.format(Calendar.getInstance().getTime(), "dd/MM/yyyy");
		String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()), "dd/MM/yyyy");

		try {
			/*
			 * lstColadas =
			 * coladaservice.consultarColada(reimpresionForm.getCodigoCliente(),
			 * reimpresionForm.getCodigoProducto(),
			 * reimpresionForm.getCodigoColada(), strL_fechaInicio,
			 * strL_fechaFin);
			 */
			aobjL_listaColadas = objL_coladaService.consultarColada(objL_reimpresionForm.getStrPv_codigoCliente(), objL_reimpresionForm.getStrPv_codigoProducto(),strL_fechaInicio, strL_fechaFin);

			request.setAttribute("listaColadas", aobjL_listaColadas);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println("Busco y Llamo a BuscarColada
		// ConsultaColadaReimpresion OK. Cliente: " +
		// reimpresionForm.getCodigoCliente() + ". Producto: " +
		// reimpresionForm.getCodigoProducto());
		return mapping.findForward("ConsultaColadaReimpresion");

	}

	public ActionForward refrescarPorObra(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		ClienteService objL_clienteService = new ClienteService();

		String strL_nroObra = "";
		String strL_nombreObra = "";
		String strL_codcli = "";

		ClienteBean objL_clienteBean = null;

		strL_nroObra = request.getParameter("numObra");
		strL_nombreObra = request.getParameter("nomObra");

		strL_codcli = request.getParameter("codCli");

		if (strL_nroObra != "") {
			objL_reimpresionForm.setStrPv_codigoObra(strL_nroObra);
		}

		if (strL_nombreObra != "") {
			objL_reimpresionForm.setStrPv_nombreObra(strL_nombreObra);
		}

		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
			objL_clienteBean = objL_clienteService.obtenCliente(strL_codcli);
			objL_reimpresionForm.setStrPv_nombreCliente(objL_clienteBean.getStrPb_nombre());
		}

		// System.out.println("Refresco y Llamo a refrescarPorObra Reimpresion
		// OK. Cliente: " + codcli);
		return mapping.findForward("Reimpresion");
	}

	public ActionForward refrescarPorProducto(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		ClienteService objL_clienteService = new ClienteService();

		String strL_nroProducto = "";
		String strL_codcli = "";

		ClienteBean objL_clienteBean = null;

		strL_nroProducto = request.getParameter("numProducto");

		strL_codcli = request.getParameter("codCli");

		// System.out.println("PRODUCTO: " +
		// request.getParameter("numProducto"));
		// System.out.println("CLIENTE: " + request.getParameter("codCli"));

		if (strL_nroProducto != "") {
			objL_reimpresionForm.setStrPv_codigoProducto(strL_nroProducto);
		}

		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
			objL_clienteBean = objL_clienteService.obtenCliente(strL_codcli);
			objL_reimpresionForm.setStrPv_nombreCliente(objL_clienteBean.getStrPb_nombre());
		}

		// System.out.println("Refresco y Llamo a refrescarPorProducto
		// Reimpresion OK. Cliente: " + codcli);
		return mapping.findForward("Reimpresion");
	}

	public ActionForward refrescarPorColada(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		ClienteService objL_clienteService = new ClienteService();
		ProductoService objL_productoService = new ProductoService();

		String strL_nroProducto = "";
		String strL_nombProducto = "";
		String strL_nroColada = "";
		String strL_codcli = "";// item

		ClienteBean objL_clienteBean = null;
		ProductoBean objL_producto = new ProductoBean();

		strL_nroProducto = request.getParameter("numProducto");
		strL_nroColada = request.getParameter("numColada");

		strL_codcli = request.getParameter("codCli");

		if (strL_nroProducto != "") {
			objL_reimpresionForm.setStrPv_codigoProducto(strL_nroProducto);
			objL_producto.setStrPv_numProducto(strL_nroProducto);
			objL_producto.setStrPv_nomProducto(objL_productoService.obtenNombreProducto(strL_nroProducto));
			objL_reimpresionForm.setStrPv_nombreProducto(objL_producto.getStrPv_nomProducto());
		}

		if (strL_nroColada != "") {
			objL_reimpresionForm.setStrPv_codigoColada(strL_nroColada);
		}

		if (strL_codcli != "") {
			objL_reimpresionForm.setStrPv_codigoCliente(strL_codcli);
			objL_clienteBean = objL_clienteService.obtenCliente(strL_codcli);
			objL_reimpresionForm.setStrPv_nombreCliente(objL_clienteBean.getStrPb_nombre());
		}

		// System.out.println("PRODUCTO: " +
		// reimpresionForm.getCodigoProducto());
		// System.out.println("NOMBRE PRODUCTO: " +
		// reimpresionForm.getNombreProducto());
		// System.out.println("COLADA: " + reimpresionForm.getCodigoColada());
		// System.out.println("CLIENTE: " + reimpresionForm.getCodigoCliente());

		// System.out.println("Refresco y Llamo a refrescarPorColada Reimpresion
		// OK. Cliente: " + codcli + ". Producto: " + nroProducto);
		return mapping.findForward("Reimpresion");
	}

	public void cargaCodigoClienteEnFormulario(HttpServletRequest request,
			ReimpresionForm objA_reimpresionForm) {
		String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
		String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");

		if (strL_tipoUsuario.equals("CLIENTE"))
			objA_reimpresionForm.setStrPv_codigoCliente(strL_codigo);
	}

	public ActionForward obtenerRegion(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException {

		try {

			// System.out.println("Entra Region");
			ReimpresionService objL_reimpresionService = new ReimpresionService();
			String srtL_codigoEmpresa = request.getParameter("codigoEmpresa");
			String strL_opciones;

			if (srtL_codigoEmpresa.equals(""))
				strL_opciones = "<option value=\"\">--Debe Seleccionar una Empresa--</option>";
			else {
				List<RegionBean> aobjL_listaRegionInicial = objL_reimpresionService.consultarRegion(srtL_codigoEmpresa);
				List<RegionBean> aobjL_listaRegion = new ArrayList<RegionBean>();

				ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;
				String strL_seleccionada = " ";

				strL_opciones = "";

				// invertimos la lista de regiones.
				for (int i = aobjL_listaRegionInicial.size(); i > 0; i--) {
					aobjL_listaRegion.add(aobjL_listaRegionInicial.get(i - 1));
				}

				for (RegionBean objregion : aobjL_listaRegion) {
					strL_seleccionada = " ";
					if ((objL_reimpresionForm.getStr_region()!= null)&& (objregion.getStrPb_disCodDis().equals(objL_reimpresionForm.getStr_region())))
						strL_seleccionada = " selected ";
					strL_opciones += "<option" + strL_seleccionada + "value=\""+ objregion.getStrPb_disCodDis()+ "\">"+ objregion.getStrPb_desEmpDis() + "</option>";
				}
			}

			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write(strL_opciones);
			response.getWriter().flush();

			return null;
		} catch (Exception e) {
			e.printStackTrace();
			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write("<option value=\"\">ERRR2</option>");
			response.getWriter().flush();
			return null;
		}
	}

	public ActionForward obtenerDespacho(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {

		try {

			// System.out.println("Entra Despacho");
			// ReimpresionService reimpresionService = new ReimpresionService();
			DespachoService objL_despachoService = new DespachoService();
			String strL_codigoCliente = request.getParameter("codigoCliente");
			String strL_codigoObra = request.getParameter("codigoObra");
			String strL_codigoDespacho = request.getParameter("codigoDespacho");
			// System.out.println("cabecera: " + codigoDespacho);

			ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

			// System.out.println("2da cabecera: " +
			// reimpresionForm.getDespacho());

			String strL_opciones;

			if (strL_codigoCliente.equals(""))
				strL_opciones = "<option value=\"\">--Debe Seleccionar un Cliente--</option>";
			else {
				if (strL_codigoObra.equals(""))
					strL_opciones = "<option value=\"\">--Debe Seleccionar una Obra--</option>";
				else {
					int intL_dias = 0;
					int intL_anio = -1;
					Calendar obj_calendar = Calendar.getInstance();
					// System.out.println(new Date(c1.getTimeInMillis()));
					obj_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
					obj_calendar.add(Calendar.YEAR, intL_anio);
					String strL_fechaFin = DateUtils.format(Calendar.getInstance().getTime(), "dd/MM/yyyy");
					String strL_fechaInicio = DateUtils.format(new Date(obj_calendar.getTimeInMillis()), "dd/MM/yyyy");

					/*
					 * System.out.println("OBTENER DESPACHO");
					 * System.out.println("Cliente: " + codigoCliente);
					 * System.out.println("Obra: " + codigoObra);
					 * System.out.println("Inicio: " + strL_fechaInicio);
					 * System.out.println("Fin: " + strL_fechaFin);
					 */

					List<DespachoBean> aDesL_listaDespachoInicial = objL_despachoService.cargarComboNroDespacho(strL_codigoCliente,strL_fechaInicio, strL_fechaFin, strL_codigoObra);
					List<DespachoBean> aDesL_listaDespacho = new ArrayList<DespachoBean>();

					String strL_seleccionada = " ";

					strL_opciones = "";

					// invertimos la lista de despachos.
					for (int i = aDesL_listaDespachoInicial.size(); i > 0; i--) {
						aDesL_listaDespacho.add(aDesL_listaDespachoInicial.get(i - 1));
					}

					strL_opciones = "<option value=\"\"></option>";

					for (DespachoBean objL_despacho : aDesL_listaDespacho) {
						strL_seleccionada = " ";
						if ((objL_reimpresionForm.getStrPv_despacho() != null)&& (objL_despacho.getStrPv_numDespacho().equals(objL_reimpresionForm.getStrPv_despacho())))
							strL_seleccionada = " selected ";
						strL_opciones += "<option" + strL_seleccionada + "value=\""
								+ objL_despacho.getStrPv_numDespacho() + "\">"
								+ objL_despacho.getStrPv_numDespacho() + "</option>";
						// System.out.println("item: " +
						// despacho.getNumDespacho());
					}
				}
			}

			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write(strL_opciones);
			response.getWriter().flush();

			return null;
		} catch (Exception e) {
			e.printStackTrace();
			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write("<option value=\"\">ERRR2</option>");
			response.getWriter().flush();
			return null;
		}
	}

	public ActionForward obtenNombreObra(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		ObraService objL_obraService = new ObraService();
		String strL_codigoCliente = request.getParameter("codigoCliente");
		String strL_codigoObra = request.getParameter("codigoObra");
		String strL_nombreObra = null;
		ObraBean objL_obra = null;

		// System.out.println("cliente: " + codigoCliente);
		// System.out.println("obra: " + codigoObra);

		objL_obra = objL_obraService.consultaNombreObra(strL_codigoObra, strL_codigoCliente);
		strL_nombreObra = (objL_obra == null) ? "No se encuentra la obra" : objL_obra.getStrPb_descObra();

		if (!strL_codigoObra.equals("")) {
			strL_codigoObra = (objL_obra == null) ? "" : objL_obra.getStrPb_numObra();
		}

		request.setAttribute("nombreObra", strL_nombreObra);

		response.setContentType("text");
		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_nombreObra);
		response.getWriter().flush();

		return null;
	}

	public ActionForward obtenNombreProducto(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		ProductoService objL_productoService = new ProductoService();
		String strL_codigoProducto = request.getParameter("codigoProducto");
		String strL_nombreProducto = null;
		ProductoBean objL_productoBean = new ProductoBean();

		// System.out.println("producto: " + codigoProducto);

		objL_productoBean.setStrPv_numProducto((strL_codigoProducto));
		objL_productoBean.setStrPv_nomProducto(objL_productoService.obtenNombreProducto(strL_codigoProducto));
		strL_nombreProducto = (strL_nombreProducto == null) ? "No se encuentra el producto": strL_nombreProducto;

		if (!strL_codigoProducto.equals("")) {
			strL_codigoProducto = (strL_codigoProducto == null) ? "" : strL_codigoProducto;
		}

		request.getSession(false).setAttribute("nombreProducto", strL_nombreProducto);

		response.setContentType("text");
		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_nombreProducto);
		response.getWriter().flush();

		return null;
	}

	public ActionForward buscarCertificado(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		ActionMessages objL_messages = new ActionMessages();
		ReimpresionForm objL_certificadoForm = (ReimpresionForm) objA_actionForm;

		ReimpresionService objL_certificadoService = new ReimpresionService();

		// cargando los datos del cliente en el Bean y Form
		CertificadoBean objL_certificadoBean = new CertificadoBean();
		DespachoService objL_despachoService = new DespachoService();

		ObraBean objL_obraBean = new ObraBean();
		ObraService objL_obraService = new ObraService();

		String strL_nomCli = "";
		String strL_codigoCli = "";

		String strL_algo = objL_certificadoForm.getStrPv_despacho();

		request.setAttribute("despacho", strL_algo);

		try {
			// tipo de usuario y el codigo de usuario q esta en sistema
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");

			// SEA CLIENTE O NO, TOMA EL CODIGO DEL INICIO
			if (strL_tipoUsuario.equals("CLIENTE")) {
				// System.out.println("ES CLIENTE");
				strL_codigoCli = strL_codigoUsuario;
			} else {
				// System.out.println("NO ES CLIENTE");
				strL_codigoCli = request.getParameter("codigoCliente");
			}

			objL_certificadoBean.setStrPv_codAdministrador(strL_codigoUsuario);

			// Se obtiene el cliente
			// System.out.println("codigoCli: "+codigoCli);
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(strL_codigoCli);
			strL_nomCli = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			// System.out.println("nombreCliente: "+strL_nomCli);

			request.setAttribute("nombreCliente", strL_nomCli);
			// System.out.println("ya seteo el nombreCliente");

			objL_certificadoBean.setStrPv_codigoCliente(strL_codigoCli);
			objL_certificadoBean.setStrPv_nombreCliente(strL_nomCli);
			objL_certificadoForm.setStrPv_nombreCliente(strL_nomCli);
			objL_certificadoForm.setStrPv_codigoCliente(strL_codigoCli);

		} catch (Exception e) {
			e.printStackTrace();
		}

		/* cargando las fechas iniciales de los date pickup */
		int intL_dias = 0;
		int intL_mes = -6;
		int intL_anio = -1;

		/* datos de fecha */
		Calendar objL_calendar = Calendar.getInstance();

		/* MODIFICACION para buscar los ultimos 6 meses, no el año */
		if (Calendar.MONTH <= 12) {
			intL_mes = -6;
			intL_anio = 0;
			if (Calendar.MONTH <= 6) {
				intL_mes = 6;
				intL_anio = -1;
			}
		}

		objL_calendar.add(Calendar.DAY_OF_MONTH, intL_dias);
		objL_calendar.add(Calendar.MONTH, intL_mes);
		objL_calendar.add(Calendar.YEAR, intL_anio); 

		String strL_fechaFin = DateUtils.format(Calendar.getInstance().getTime(), "dd/MM/yyyy");
		String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()), "dd/MM/yyyy");

		/* cargando variables */
		String strL_codUsu = objL_certificadoBean.getStrPv_codAdministrador();
		String strL_tipoBusqueda = objL_certificadoForm.getStrPv_filtroBusqueda();
		String strL_codCli = objL_certificadoForm.getStrPv_codigoCliente();
		String strL_nomCliente = objL_certificadoForm.getStrPv_nombreCliente();
		String strL_nroSerie = objL_certificadoForm.getStrPv_serie();
		String strL_nroFact = objL_certificadoForm.getStrPv_numero();
		String strL_fechaInicioF = objL_certificadoForm.getStrPv_fechaInicioF();
		String strL_fechaFinF = objL_certificadoForm.getStrPv_fechaFinF();
		String strL_nroObra = objL_certificadoForm.getStrPv_codigoObra();
		String strL_nomObra = objL_certificadoForm.getStrPv_nombreObra();
		String strL_nroDespacho = objL_certificadoForm.getStrPv_despacho();
		if (strL_nroDespacho == null)
			strL_nroDespacho = "";

		String strL_fechaInicioPr = objL_certificadoForm.getStrPv_fechaInicioPr();
		String strL_fechaFinPr = objL_certificadoForm.getStrPv_fechaFinPr();

		String strL_nroProducto = objL_certificadoForm.getStrPv_codigoProducto();
		String strL_nomProducto = objL_certificadoForm.getStrPv_nombreProducto();
		if (strL_nroProducto == null)
			strL_nroProducto = "";

		String strL_nroColada = objL_certificadoForm.getStrPv_codigoColada();
		if (strL_nroColada == null)
			strL_nroColada = "";

		/*
		 * System.out.println("---AQUI MANDO LA BUSQUEDA---");
		 * System.out.println("usuario " + codUsu); System.out.println("fecha de
		 * inicio " + strL_fechaInicio); System.out.println("fecha de fin " +
		 * strL_fechaFin); System.out.println("tipo busqueda " + tipoBusqueda);
		 * System.out.println("codigo cliente " + codCli);
		 * System.out.println("nombre cliente " + strL_nomCliente);
		 * System.out.println("serie " + strL_nroSerie); System.out.println("numero " +
		 * strL_nroFact); System.out.println("inicio factura " + strL_fechaInicioF);
		 * System.out.println("fin factura " + fechaFinF);
		 * System.out.println("codigo obra " + nroObra);
		 * System.out.println("nombre obra " + nomObra);
		 * System.out.println("codigo despacho " + nroDespacho);
		 * System.out.println("inicio producto " + fechaInicioPr);
		 * System.out.println("fin producto " + fechaFinPr);
		 * System.out.println("codigo producto " + nroProducto);
		 * System.out.println("codigo colada " + nroColada);
		 * System.out.println("-----------------------------");
		 */

		ArrayList<String> aobjL_aux = new ArrayList<String>();

		/*
		 * ArrayList<CertificadoBean> comboSerie = new ArrayList<CertificadoBean>();
		 * ArrayList<CertificadoBean> comboFact = new ArrayList<CertificadoBean>();
		 * ArrayList<CertificadoBean> comboObra = new ArrayList<CertificadoBean>();
		 * ArrayList<CertificadoBean> comboDesp = new ArrayList<CertificadoBean>();
		 * ArrayList<CertificadoBean> comboProd = new ArrayList<CertificadoBean>();
		 * ArrayList<CertificadoBean> comboColada = new ArrayList<CertificadoBean>();
		 */
		ArrayList<CertificadoBean> aobjL_buscarxFact = new ArrayList<CertificadoBean>();
		ArrayList<CertificadoBean> aobjL_buscarxFecha = new ArrayList<CertificadoBean>();
		ArrayList<CertificadoBean> aobjL_buscarxObra = new ArrayList<CertificadoBean>();
		ArrayList<CertificadoBean> aobjL_buscarxProd = new ArrayList<CertificadoBean>();

		try {
			// comboSerie =
			// comboFact =
			// buscarxFact =
			// buscarxFecha =
		} catch (Exception e) {
			e.printStackTrace();

		}
		/* buscar certificados */
		// System.out.println("Realizando la busqueda");
		try {
			if (strL_tipoBusqueda.compareTo("PF") == 0) {
				objL_certificadoForm.setStrPv_filtroBusqueda("PF");

				objL_certificadoForm.setStrPv_serie(strL_nroSerie);
				objL_certificadoForm.setStrPv_numero(strL_nroFact);
				objL_certificadoForm.setStrPv_fechaInicioF(strL_fechaInicio);
				objL_certificadoForm.setStrPv_fechaFinF(strL_fechaFin);
				objL_certificadoForm.setStrPv_codigoObra(strL_nroObra);
				objL_certificadoForm.setStrPv_despacho(strL_nroDespacho);

				objL_certificadoForm.setStrPv_fechaInicioPr(strL_fechaInicio);
				objL_certificadoForm.setStrPv_fechaFinPr(strL_fechaFin);

				objL_certificadoForm.setStrPv_codigoProducto(strL_nroProducto);
				objL_certificadoForm.setStrPv_nombreProducto(strL_nomProducto);
				objL_certificadoForm.setStrPv_codigoColada(strL_nroColada);
				try {
					aobjL_buscarxFact = objL_certificadoService.buscarCertificadosXFactura(strL_codCli, strL_nroSerie,strL_nroFact, strL_fechaInicio, strL_fechaFin);
				} catch (Exception e) {
					e.printStackTrace();
				}
				objL_certificadoForm.setListaCertificados(aobjL_buscarxFact);
				// System.out.println("Tamanho en action listaCertificados: " +
				// buscarxFact.size());
			}
			if (strL_tipoBusqueda.compareTo("PFF") == 0) {
				objL_certificadoForm.setStrPv_filtroBusqueda("PFF");
				objL_certificadoForm.setStrPv_serie(strL_nroSerie);
				objL_certificadoForm.setStrPv_numero(strL_nroFact);
				objL_certificadoForm.setStrPv_fechaInicioF(strL_fechaInicioF);
				objL_certificadoForm.setStrPv_fechaFinF(strL_fechaFinF);
				objL_certificadoForm.setStrPv_codigoObra(strL_nroObra);
				objL_certificadoForm.setStrPv_despacho(strL_nroDespacho);

				objL_certificadoForm.setStrPv_fechaInicioPr(strL_fechaInicio);
				objL_certificadoForm.setStrPv_fechaFinPr(strL_fechaFin);

				objL_certificadoForm.setStrPv_codigoProducto(strL_nroProducto);
				objL_certificadoForm.setStrPv_nombreProducto(strL_nomProducto);
				objL_certificadoForm.setStrPv_codigoColada(strL_nroColada);
				try {
					aobjL_buscarxFecha = objL_certificadoService.buscarCertificadosXFechas(strL_codCli, strL_fechaInicioF,strL_fechaFinF);
				} catch (Exception e) {
					e.printStackTrace();
				}
				objL_certificadoForm.setListaCertificados(aobjL_buscarxFecha);
			}
			if (strL_tipoBusqueda.compareTo("POD") == 0) {
				objL_certificadoForm.setStrPv_filtroBusqueda("POD");
				objL_certificadoForm.setStrPv_serie(strL_nroSerie);
				objL_certificadoForm.setStrPv_numero(strL_nroFact);
				objL_certificadoForm.setStrPv_fechaInicioF(strL_fechaInicioF);
				objL_certificadoForm.setStrPv_fechaFinF(strL_fechaFinF);
				objL_certificadoForm.setStrPv_codigoObra(strL_nroObra);
				objL_obraBean = objL_obraService.consultaNombreObra(strL_nroObra, strL_codCli);
				strL_nomObra = (objL_obraBean == null) ? "No se encuentra la obra": objL_obraBean.getStrPb_descObra();

				objL_certificadoForm.setStrPv_nombreObra(strL_nomObra);
				// objL_certificadoForm.setStrCl_descripcionObra(certificadoService.cargarDescripcionObra(nroObra,
				// strL_codCli));
				objL_certificadoForm.setStrPv_despacho(strL_nroDespacho);

				objL_certificadoForm.setStrPv_fechaInicioPr(strL_fechaInicio);
				objL_certificadoForm.setStrPv_fechaFinPr(strL_fechaFin);

				objL_certificadoForm.setStrPv_codigoProducto(strL_nroProducto);
				objL_certificadoForm.setStrPv_nombreProducto(strL_nomProducto);
				objL_certificadoForm.setStrPv_codigoColada(strL_nroColada);

				try {
					aobjL_buscarxObra = objL_certificadoService.buscarCertificadosXObra(strL_codCli, strL_nroObra, strL_nroDespacho, strL_fechaInicio,strL_fechaFin);
				} catch (Exception e) {
					e.printStackTrace();
				}
				objL_certificadoForm.setListaCertificados(aobjL_buscarxObra);
			}
			if (strL_tipoBusqueda.compareTo("PPC") == 0) {
				objL_certificadoForm.setStrPv_filtroBusqueda("PPC");
				objL_certificadoForm.setStrPv_serie(strL_nroSerie);
				objL_certificadoForm.setStrPv_numero(strL_nroFact);
				objL_certificadoForm.setStrPv_fechaInicioF(strL_fechaInicio);
				objL_certificadoForm.setStrPv_fechaFinF(strL_fechaFin);
				objL_certificadoForm.setStrPv_codigoObra(strL_nroObra);
				objL_certificadoForm.setStrPv_despacho(strL_nroDespacho);
				
				
				objL_certificadoForm.setStrPv_fechaInicioPr(strL_fechaInicioPr);
				objL_certificadoForm.setStrPv_fechaFinPr(strL_fechaFinPr);

				objL_certificadoForm.setStrPv_codigoProducto(strL_nroProducto);
				objL_certificadoForm.setStrPv_nombreProducto(strL_nomProducto);
				objL_certificadoForm.setStrPv_codigoColada(strL_nroColada);

				try {
					aobjL_buscarxProd = objL_certificadoService.buscarCertificadosXProducto(strL_codCli, strL_nroProducto,strL_nroColada, strL_fechaInicioPr, strL_fechaFinPr);
				} catch (Exception e) {
					e.printStackTrace();
				}
				objL_certificadoForm.setListaCertificados(aobjL_buscarxProd);

			}
		} catch (Exception e) {

			e.printStackTrace();
			// System.out.println("1er Catch del Action");
		}

		try {

			if (objL_certificadoForm.getStrPv_filtroBusqueda().compareTo("PF") == 0) {
				request.setAttribute("filtroBusqueda", "PF");
				request.setAttribute("codigoCliente", strL_codCli);
				request.setAttribute("nombreCliente", strL_nomCliente);
				request.setAttribute("serie", strL_nroSerie);
				request.setAttribute("numero", strL_nroFact);
				request.setAttribute("fechaInicioF", strL_fechaInicio);
				request.setAttribute("fechaFinF", strL_fechaFin);
				request.setAttribute("codigoObra", "");
				// request.setAttribute("nombreObra","");
				// request.setAttribute("listaDespachos", null);
				request.setAttribute("codigoDespacho", "");
				request.setAttribute("fechaInicioPr", strL_fechaInicio);
				request.setAttribute("fechaFinPr", strL_fechaFin);

				request.setAttribute("codigoProducto", "");
				request.setAttribute("nombreProducto", "");
				request.setAttribute("codigoColada", "");

				if (strL_nroSerie.trim().equals("")) {
					objL_messages.add("estado", new ActionMessage("certificado.strL_nroSerie.nulo"));
				} else {
					if (strL_nroFact.trim().equals(""))
						objL_messages.add("estado", new ActionMessage("certificado.strL_nroFactura.nulo"));
					else {

						ArrayList<CertificadoBean> aobjL_listaCertificados = aobjL_buscarxFact;
						// System.out.println("listaCertificados aun no se setea
						// en el form: "+ listaCertificados.size());
						if (aobjL_listaCertificados.size() == 0) {
							// System.out.println("listaCertificados.size="+listaCertificados.size());
							CertificadoBean objL_certificadoVentas = objL_certificadoService.cargarDatosVentas(strL_codCli);
							// messages.add("alerta", new
							// ActionMessage("certificado.AlertaNoSeEncontroPDF","XXXX","1265757","2124"));
							objL_messages.add("alerta", new ActionMessage("certificado.AlertaNoSeEncontroPDF",objL_certificadoVentas.getStrPv_encargadoVentas(),objL_certificadoVentas.getStrPv_correoVentas(),objL_certificadoVentas.getStrPv_anexoVentas()));
						} else {// ASIGNAR EN ATRIBUTO Q POSEE EL FORM PARA ESE
								// ARRAY AOBJ_CERTIFICADOS...
							ArrayList<CertificadoBean> aCerL_lisCert = aobjL_buscarxFact;
							// ArrayList<CertificadoBean> obj_cert =
							// objL_logiccert.buscarCertificadosXFactura(strL_codCli,
							// strL_nroSerie, strL_nroFact,strL_fechaInicio,strL_fechaFin
							// );
							objL_certificadoForm.setListaCertificados(aCerL_lisCert);
							request.setAttribute("listaCertificados", aCerL_lisCert);
							// System.out.println("seteando en el form : "+
							// lisCert.size());
						}
					}
				}
			}
			if (objL_certificadoForm.getStrPv_filtroBusqueda().compareTo("PFF") == 0) {
				request.setAttribute("filtroBusqueda", "PFF");
				request.setAttribute("codigoCliente", strL_codCli);
				request.setAttribute("nombreCliente", strL_nomCliente);
				request.setAttribute("serie", "");
				request.setAttribute("numero", "");
				request.setAttribute("fechaInicioF", objL_certificadoForm.getStrPv_fechaInicioF());
				request.setAttribute("fechaFinF", objL_certificadoForm.getStrPv_fechaFinF());
				request.setAttribute("codigoObra", "");
				request.setAttribute("nombreObra", "");
				// request.setAttribute("listaDespachos", null);
				request.setAttribute("codigoDespacho", "");
				request.setAttribute("fechaInicioPr", strL_fechaInicio);
				request.setAttribute("fechaFinPr", strL_fechaFin);

				request.setAttribute("codigoProducto", "");
				request.setAttribute("nombreProducto", "");
				request.setAttribute("codigoColada", "");

				if (strL_fechaInicioF.trim().equals("")) {
					objL_messages.add("estado", new ActionMessage(
							"certificado.fechaInicioFe.nulo"));
				} else {
					if (strL_fechaFinF.trim().equals(""))
						objL_messages.add("estado", new ActionMessage(
								"certificado.fechaFinFe.nulo"));
					else {

						ArrayList<CertificadoBean> aobjL_listaCertificados = aobjL_buscarxFecha;
						if (aobjL_listaCertificados.size() == 0) {
							// System.out.println("listaCertificados.size="+listaCertificados.size());
							CertificadoBean objL_certificadoVentas = objL_certificadoService.cargarDatosVentas(strL_codCli);
							objL_messages.add("alerta", new ActionMessage(
									"certificado.AlertaNoSeEncontroPDF",
									objL_certificadoVentas.getStrPv_encargadoVentas(),
									objL_certificadoVentas.getStrPv_correoVentas(),
									objL_certificadoVentas.getStrPv_anexoVentas()));

						} else {// AGREGAR A ATRIBUTO DEL FORM PARA
								// AOBJ_CERTIFICADOS...
							ArrayList<CertificadoBean> aobjL_lisCert = aobjL_buscarxFecha;
							objL_certificadoForm.setListaCertificados(aobjL_lisCert);
							request.setAttribute("listaCertificados", aobjL_lisCert);
						}
					}
				}
			}
			if (objL_certificadoForm.getStrPv_filtroBusqueda().compareTo("POD") == 0) {
				request.setAttribute("filtroBusqueda", "POD");
				request.setAttribute("codigoCliente", strL_codCli);
				request.setAttribute("nombreCliente", strL_nomCliente);
				request.setAttribute("serie", "");
				request.setAttribute("numero", "");
				request.setAttribute("fechaInicioF", strL_fechaInicio);
				request.setAttribute("fechaFinF", strL_fechaFin);
				request.setAttribute("codigoObra", strL_nroObra);
				request.setAttribute("nombreObra", strL_nomObra);

				/*
				 * List<DespachoBean> listaDespachoInicial = new ArrayList<DespachoBean>();
				 * listaDespachoInicial =
				 * despachoService.cargarComboNroDespacho(strL_codCli,
				 * strL_fechaInicio, strL_fechaFin, nroObra); List<DespachoBean>
				 * listaDespacho = new ArrayList<DespachoBean>(); //invertimos
				 * la lista de despachos. for(int i=listaDespachoInicial.size();
				 * i>0;i--){ listaDespacho.add(listaDespachoInicial.get(i-1)); }
				 * request.setAttribute("listaDespachos", listaDespacho);
				 */
				request.setAttribute("codigoDespacho", strL_nroDespacho);
				request.setAttribute("fechaInicioPr", strL_fechaInicio);
				request.setAttribute("fechaFinPr", strL_fechaFin);

				request.setAttribute("codigoProducto", "");
				request.setAttribute("nombreProducto", "");
				request.setAttribute("codigoColada", "");

				if (strL_nroObra.trim().equals("")) {
					objL_messages.add("estado", new ActionMessage(
							"certificado.nroObra.nulo"));
				} else {
					/*
					 * if(nroDespacho.trim().equals("")) messages.add("estado",
					 * new ActionMessage("certificado.nroDespacho.nulo")); else
					 */
					ArrayList<CertificadoBean> aobjL_listaCertificados = aobjL_buscarxObra;
					if (aobjL_listaCertificados.size() == 0) {
						// System.out.println("listaCertificados.size="+listaCertificados.size());
						CertificadoBean objL_certificadoVentas = objL_certificadoService.cargarDatosVentas(strL_codCli);
						objL_messages.add("alerta", new ActionMessage("certificado.AlertaNoSeEncontroPDF",
								objL_certificadoVentas.getStrPv_encargadoVentas(),
								objL_certificadoVentas.getStrPv_correoVentas(),
								objL_certificadoVentas.getStrPv_anexoVentas()));
					} else {// AGREGAR A ATRIBUTO DEL FORM PARA
							// AOBJ_CERTIFICADOS...
						// System.out.println("codigo obra: "+ nroObra);
						ArrayList<CertificadoBean> aobjL_lisCert = aobjL_buscarxObra;
						objL_certificadoForm.setListaCertificados(aobjL_lisCert);
						request.setAttribute("listaCertificados", aobjL_lisCert);
					}
				}
			}
			if (objL_certificadoForm.getStrPv_filtroBusqueda().compareTo("PPC") == 0) {
				request.setAttribute("filtroBusqueda", "PPC");
				request.setAttribute("codigoCliente", strL_codCli);
				request.setAttribute("nombreCliente", strL_nomCliente);
				request.setAttribute("serie", "");
				request.setAttribute("numero", "");
				request.setAttribute("fechaInicioF", strL_fechaInicio);
				request.setAttribute("fechaFinF", strL_fechaFin);
				request.setAttribute("codigoObra", "");
				request.setAttribute("nombreObra", "");
				// request.setAttribute("listaDespachos", null);
				request.setAttribute("codigoDespacho", "");
				request.setAttribute("fechaInicioPr", objL_certificadoForm.getStrPv_fechaInicioPr());
				request.setAttribute("fechaFinPr", objL_certificadoForm.getStrPv_fechaFinPr());

				request.setAttribute("codigoProducto", strL_nroProducto);
				request.setAttribute("nombreProducto", strL_nomProducto);
				request.setAttribute("codigoColada", strL_nroColada);

				// System.out.println("codigo colada: "+ nroColada);

				if (strL_fechaInicioPr.compareTo("") == 0) {
					objL_messages.add("estado", new ActionMessage(
							"certificado.fechaInicioPr.nulo"));
					// System.out.println("Fecha Inicio esta vacia");
				} else {
					if (strL_fechaFinPr.compareTo("") == 0) {
						objL_messages.add("estado", new ActionMessage(
								"certificado.fechaFinPr.nulo"));
						// System.out.println("Fecha Fin esta vacia");
					} else {
						if (strL_nroProducto.compareTo("") == 0) {
							objL_messages.add("estado", new ActionMessage(
									"certificado.nroProducto.nulo"));
							// System.out.println("Codigo del producto esta
							// vacio");
						} else { // ********* PARA QUE OBLIGUE A INGRESAR EL
									// NRO DE COLADA ***************
							if (strL_nroColada.compareTo("") == 0) {
								// System.out.println("Codigo dela colada esta
								// vacio");
								objL_messages.add("estado", new ActionMessage(
										"certificado.nroColada.nulo"));

							} else {
								// System.out.println("Entro a la busqueda");
								// ArrayList<CertificadoBean> listaCertificados
								// =
								// objL_logiccert.buscarCertificadosXProducto(strL_codCli,
								// nroProducto, nroColada, strL_fechaInicio,
								// strL_fechaFin);//BORRAR SI QDA LO DE ABAJO->
								// SI EXISTEN FECHAS PRODUCTO
								ArrayList<CertificadoBean> aobjL_listaCertificados = aobjL_buscarxProd;

								if (aobjL_listaCertificados.size() == 0) {
									// System.out.println("No encontro
									// certificados con los criterios
									// seleccionados");
									// System.out.println("listaCertificados.size="+listaCertificados.size());
									CertificadoBean objL_certificadoVentas = objL_certificadoService.cargarDatosVentas(strL_codCli);
									objL_messages.add("alerta",
												  new ActionMessage("certificado.AlertaNoSeEncontroPDF",
												  objL_certificadoVentas.getStrPv_encargadoVentas(),
												  objL_certificadoVentas.getStrPv_correoVentas(),
												  objL_certificadoVentas.getStrPv_anexoVentas()));

								} else {// AGREGAR A ATRIBUTO DEL FORM PARA
										// AOBJ_CERTIFICADOS...
									// System.out.println("Encontro certificados
									// .. los empieza a listar");
									ArrayList<CertificadoBean> aobjL_lisCert = aobjL_buscarxProd;
									objL_certificadoForm.setListaCertificados(aobjL_lisCert);
									request.setAttribute("listaCertificados",aobjL_lisCert);
									// System.out.println("Encontro certificados
									// .. termino de listar
									// "+listaCertificados.size());
								}
							}
						}
					}
				}
				saveMessages(request, objL_messages);
			}

		} catch (Exception e) {
			e.printStackTrace();
			// System.out.println("Catch en el Action - buscar (al final)");
		}

		objL_certificadoForm.setStrPv_despacho(strL_algo);

		saveMessages(request, objL_messages);
		// return mapping.findForward("CertificadosInicial");
		return mapping.findForward("Reimpresion");
	}

	public ActionForward getPDF(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response) {

		ActionMessages objL_messages = new ActionMessages();
		CertificadoBean objL_certificado = new CertificadoBean();
		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;
		ReimpresionService objL_reimpresionService = new ReimpresionService();

		// System.out.println("---AQUI MANDO EL GETPDF---");
		CertificadoBean objL_certificadoBean = new CertificadoBean();
		String strL_nomCli = "";
		// String codigoCli = request.getRemoteUser();
		String strL_codigoCli = "";
		// System.out.println("usuario remoto: "+request.getRemoteUser());
		// tipo de usuario y el codigo de usuario q esta en sistema
		String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
		String strL_codigoUsuario = (String) request.getSession(false).getAttribute("codigoUser");
		// System.out.println("codigo usuario: "+codigoUsuario);

		// SEA CLIENTE O NO, TOMA EL CODIGO DEL INICIO
		if (strL_tipoUsuario.equals("CLIENTE")) {
			// System.out.println("ES CLIENTE");
			strL_codigoCli = strL_codigoUsuario;
		} else {
			// System.out.println("NO ES CLIENTE");
			strL_codigoCli = request.getParameter("codigoCliente");
		}

		objL_certificadoBean.setStrPv_codigoCliente(strL_codigoCli);

		// Se obtiene el cliente
		// System.out.println("codigoCli: "+codigoCli);
		ClienteService objL_clienteService = new ClienteService();
		ClienteBean objL_clienteBean = null;
		objL_clienteBean = objL_clienteService.obtenCliente(strL_codigoCli);
		strL_nomCli = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
		// System.out.println("nombreCliente: "+strL_nomCli);

		try {
			request.setAttribute("strCl_nombreCliente", strL_nomCli);
			// System.out.println("ya seteo el strCl_nombreCliente");

		} catch (Exception e) {
			e.printStackTrace();
		}
		// HASTA AQUI
		objL_certificadoBean.setStrPv_nombreCliente(strL_nomCli);
		objL_reimpresionForm.setStrPv_nombreCliente(strL_nomCli);
		objL_reimpresionForm.setStrPv_codigoCliente(objL_certificadoBean.getStrPv_codigoCliente());

		// System.out.println("seteado hasta antes de fecha");
		objL_certificado.setStrPv_fechaCertificado(request.getParameter("fecha"));
		String strL_fecha = objL_certificado.getStrPv_fechaCertificado();
		// System.out.println("strL_fecha: " +
		// bean.getStrCl_fechaCertificado());

		objL_certificado.setStrPv_factura(request.getParameter("factura"));
		String strL_factura = objL_certificado.getStrPv_factura();
		// System.out.println("strL_factura: " + bean.getStrCl_factura());

		String strL_codCli = objL_reimpresionForm.getStrPv_codigoCliente();
		objL_certificado.setStrPv_codigoCliente(strL_codCli);
		// System.out.println("strL_codCli: " + bean.getStrCl_codigoCliente());

		objL_certificado.setStrPv_nroCertificado(request.getParameter("nroCertificado"));
		// System.out.println("strCl_nroCertificado: " +
		// bean.getStrCl_nroCertificado());
		// para colocar ceros a la izquierda

		String strL_nroCert = objL_certificado.getStrPv_nroCertificado();
		// formato para 10 digitos
		String strL_nroCertFormato = pad(objL_certificado.getStrPv_nroCertificado(), 10,'0');
		// System.out.println("strL_nroCert:" + strL_nroCert);
		// System.out.println("strL_nroCertcon formato:" + strL_nroCertFormato);

		int intL_flagMenorSeisDigitos = 0;

		String strL_nombreArchivo1 = strL_factura + "-" + strL_nroCert + "-" + strL_codCli + ".pdf";
		String strL_nombreArchivo2 = strL_factura + "-" + strL_nroCertFormato + "-"	+ strL_codCli + ".pdf";

		// System.out.println("archivo1: " + nombreArchivo1);
		// System.out.println("archivo2: " + nombreArchivo2);

		StringTokenizer objL_st = new StringTokenizer(strL_fecha, "-");

		/* Creamos el almacenamiento */
		String[] aobjL_fechaComponentes = new String[objL_st.countTokens()];
		int i;
		/* Separamos los tokens de la cadena del parametro */
		for (i = 0; i < aobjL_fechaComponentes.length; i++)
			aobjL_fechaComponentes[i] = objL_st.nextToken();

		String fechaCarpeta = aobjL_fechaComponentes[0] + aobjL_fechaComponentes[1]+ aobjL_fechaComponentes[2];
		// System.out.println("fecha carpeta: "+fechaCarpeta);

		// System.out.println("*****************************************Nuevo
		// ArchivoAction.cargarArchivos()");

		String strL_usuarioRecRemoto = "";
		String strL_claveRecRemoto = "";

		/***********************************************************************
		 * String strL_usuarioRecRemoto ="lrodrigm"; String
		 * strL_claveRecRemoto="******";
		 **********************************************************************/
		// String
		// strL_hostRecRemoto="/home/tflores/Documents/certificados/0001.pdf";
		String strL_ruta = "";

		try {
			strL_ruta = objL_reimpresionService.cargar_Ruta_Remoto();
			// System.out.println("ruta: " + ruta);
		} catch (Exception e) {
			e.printStackTrace();
		}

		/***********************************************************************
		 * String strL_hostRecRemoto="sl1"; String strL_rutaRecRemoto="certif";
		 **********************************************************************/

		/* seteando el path de origen del archivo .pdf */

		/***********************************************************************
		 * SmbFile archivo1=null;
		 **********************************************************************/

		/***********************************************************************
		 * System.out.println("smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+strL_rutaRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo1);
		 * String
		 * objL_filePath="smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+strL_rutaRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo1;
		 **********************************************************************/
		/*
		 * 2) solo con host Remoto + usuario y pwd+ carpetas x fecha de emision
		 * del certificado - la ruta esta incluida en la BD: sl1/certif
		 */
		// System.out.println("smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo);
		// String
		// objL_filePath="smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo;
		/*
		 * 3) solo con Host Remoto+ carpeta de fecha de emision - usuario ni
		 * contrasenha
		 * System.out.println("smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo);
		 * String
		 * objL_filePath="smb://"+strL_usuarioRecRemoto+":"+strL_claveRecRemoto+"@"+strL_hostRecRemoto+"/"+fechaCarpeta+"/"+nombreArchivo;
		 */

		// System.out.println("Despues de setear el path");
		/* Cargando el archivo .pdf */
		try {
			// System.out.println("Antes de cargar el archivo");
			/*******************************************************************
			 * archivo1 = new SmbFile(objL_filePath);
			 ******************************************************************/

			if (strL_nroCert.length() <= 6) {
				// System.out.println("menor de 6 digitos");
				intL_flagMenorSeisDigitos = 1;
			} else {
				// System.out.println("mayor de 6 digitos");
			}

			// String rutaLocal="/home/jalcala/Documents/certificados/";
			// rutaLocal="C:/";
			// ruta=rutaLocal;

			File objL_archivo1 = new File(strL_ruta + strL_nombreArchivo2);
			System.out.println("archivo1 FILE1: " + objL_archivo1);

			// System.out.println("despues de cargar el archivo");

			int intL_existe = 0;
			// System.out.println("boolean "+archivo1.exists());

			if (objL_archivo1.exists()) {
				intL_existe = 1;
				// System.out.println("Existe el archivo con formato:
				// "+archivo1);

			} else {
				// buscarlo con el formato anterior, antes de la amplicacion a
				// 10 digitos
				if (intL_flagMenorSeisDigitos == 1) {
					objL_archivo1 = new File(strL_ruta + strL_nombreArchivo1);
					// System.out.println("nuevo archivo1: "+archivo1);
					if (objL_archivo1.exists()) {

						// System.out.println("si existe el archivo sin
						// formato"+archivo1);
						intL_existe = 1;
					}
				}
			}

			if (intL_existe == 1) {
				try {
					strL_nombreArchivo1 = "Certificado de Calidad.pdf";
					// System.out.println("antes de application/pdf");
					response.setContentType("application/pdf");
					// System.out.println("despuesd de application/ pdf y
					// asignaciom del nombre de archivo");
					response.setHeader("Content-disposition",
							"attachment; filename=" + strL_nombreArchivo1);// myFile.getFileName());
					// System.out.println("antes de asignar el tamanho de
					// memoria al cache");
					response.setHeader("Cache-Control", "max-age=200");
					// System.out.println("despues de asignar el tamanho de
					// memoria al cache");
					ServletOutputStream objL_out = null;
					objL_out = response.getOutputStream();
					// origen:

					FileInputStream objL_file;

					objL_file = new FileInputStream(objL_archivo1);
					/***********************************************************
					 * SmbFileInputStream SmbIn = new
					 * SmbFileInputStream(archivo1 );
					 **********************************************************/
					byte[] aobjL_arreglo = new byte[8192];
					int intL_n;
					// System.out.println("Antes de leer el archivo");
					while ((intL_n = objL_file.read(aobjL_arreglo)) > 0) {
						/*******************************************************
						 * while(( n = SmbIn.read( b )) > 0 ) {
						 ******************************************************/
						objL_out.write(aobjL_arreglo, 0, intL_n);
					}
					// System.out.println("despues de leer el archivo");
					objL_file.close();
					/***********************************************************
					 * SmbIn.close();
					 **********************************************************/
					objL_out.flush();
					objL_out.close();

					buscarCertificado(mapping, objA_actionForm, request, response);

				} catch (Exception e) {
					e.printStackTrace();
					// System.out.println("El archivo tiene un tamanho
					// supuestamente 0 : "+ archivo1.length());
				}
			} else {
				// System.out.println("Entro al else NO EXISTE");
				buscarCertificado(mapping, objA_actionForm, request, response);
				objL_messages.add("alerta", new ActionMessage("certificado.AlertaNoSeEncontroPDF"));

			}
		}

		/*
		 * catch (MalformedURLException e) { e.printStackTrace();
		 * System.out.println("Entro al catch1"); } catch (SmbException e) {
		 * e.printStackTrace(); System.out.println("Entro al catch2");
		 *  }
		 */
		catch (Exception e) {
			e.printStackTrace();
			// System.out.println("Entro al catch3 - Exception Gral no
			// clasificado");

		}

		saveMessages(request, objL_messages);
		return null;// mapping.findForward("CertificadosInicial");//return null;
	}

	public String pad(String strA_param1, int size, char padChar) {
		int intL_i = 0;
		intL_i = strA_param1.length();

		if (intL_i == size)
			return strA_param1;
		else {
			int intL_j = size - intL_i;
			for (int k = 0; k < intL_j; k++) {
				strA_param1 = padChar + strA_param1;
			}
			return strA_param1;
		}
	}

	public ActionForward reimprimirDocumento(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		ReimpresionForm objL_reimpresionForm = (ReimpresionForm) objA_actionForm;

		ServletOutputStream objL_stream = null;
		BufferedInputStream objL_buff = null;
		FTPUtils objL_ftp = new FTPUtils();

		try {

			String strA_tipoDocumento = objL_reimpresionForm.getStrPv_tipoDocumento();
			String strA_nroDocumentoIni = objL_reimpresionForm.getStrPv_nroInicial();
			String strA_nroDocumentoFin = objL_reimpresionForm.getStrPv_nroFinal();
			String strA_codCliente = objL_reimpresionForm.getStrPv_codigoCliente();
						
			ParametrosWS objL_parametrosWS = new ParametrosWS();
			ReimpresionService objL_reimpresionService = new ReimpresionService();
			objL_parametrosWS.setStrPb_nroDocumentoIni(strA_nroDocumentoIni);
			objL_parametrosWS.setStrPb_nroDocumentoFin(strA_nroDocumentoFin);
			objL_parametrosWS.setStrPb_codCliente(strA_codCliente);
			
			List<ConsultaWS> aobjL_listaConsultaWS = new ArrayList<ConsultaWS>();
			
			/* "intTipoWS" tipo de webservice a utilizar
			 * 1=web service para guia de remision
			 * 2=web service para factura,boleta, NC y ND
			 */ 
			
			int intTipoWS= 0;
			if(strA_tipoDocumento.equals("003"))
			{
				intTipoWS=1;
				aobjL_listaConsultaWS = objL_reimpresionService.invocarWebService(objL_parametrosWS,intTipoWS);		
			} else if (strA_tipoDocumento.equals("001")||strA_tipoDocumento.equals("002")||strA_tipoDocumento.equals("004")||strA_tipoDocumento.equals("005")) {
				intTipoWS=2;
				aobjL_listaConsultaWS = objL_reimpresionService.invocarWebService(objL_parametrosWS,intTipoWS);
			}
			
				if (!(aobjL_listaConsultaWS==null)) {
				//confirmar como se manejaba antiguamente la ruta del documento 
				String strL_rutaDocumento = aobjL_listaConsultaWS.get(1).getStrPb_rutaArchivo().toString();
				
				objL_ftp.abrirConexion();

				InputStream objL_inputDocument = objL_ftp.download(UtilPersistencia.getNombreDirectorio(strL_rutaDocumento), UtilPersistencia.getNombreArchivo(strL_rutaDocumento));

				if (objL_inputDocument == null) {
					request.getSession(false).setAttribute("mensajeReimpresion","El documento no existe en el servidor");
					return mapping.findForward("Reimpresion");
				} else
					objL_stream = response.getOutputStream();

				// set response headers
				String strL_contentType = UtilPersistencia.getContentTypeFromFileName(strL_rutaDocumento);
				response.setContentType(strL_contentType);

				response.addHeader("Content-Disposition","attachment; filename="+ UtilPersistencia.getNombreArchivo(strL_rutaDocumento));

				objL_buff = new BufferedInputStream(objL_inputDocument);

				int intL_readBytes = 0;

				// read from the file; write to the ServletOutputStream
				while (objL_buff != null && (intL_readBytes = objL_buff.read()) != -1) {
					objL_stream.write(intL_readBytes);
				}

				return null;
			} else {

				request.getSession(false).setAttribute("mensajeReimpresion","El documento no existe en el servidor");
				return mapping.findForward("Reimpresion");

			}

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ReimpresionAction-reimpresionHome: " + e.getMessage());
			// System.out.println("ReimpresionAction-reimpresionHome:
			// "+e.getMessage());
			return mapping.findForward("error");

		} finally {
			request.getSession(false).setAttribute("rutaDocumento", "");
			if (objL_stream != null)
				objL_stream.close();
			if (objL_buff != null)
				objL_buff.close();
			objL_ftp.cerrarConexion();
		}

	}

	public ActionForward irInicio(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException {
		try {

			return mapping.findForward("inicio");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ReimpresionAction-reimpresionHome: " + e.getMessage());
			return mapping.findForward("error");
		}
	}

}
